package bookstudytest.lambda;

/**
 * @Auther: Lee
 * @Date: 2018/6/7 08:34
 * @Description:
 */
public class ConvertRealize {
    Integer c = 223;
    static Integer a = 116;

    public static void main(String[] args) {
        Integer i = 443;
        Converter<String, Integer> converter;
        //静态方法引用
        //使用::引用方法
        converter = Integer::valueOf;
        converter.convert("1111");
        //对象方法的传入
        Somthing somthing = new Somthing();
        Converter<String, String> converter1 = somthing::startsWith;

        //对象构造方法
        //传入Person的构造方法生成PersonFactory的示例
        PersonFactory<Person> personFactory = Person::new;
        Person person = personFactory.creat("羊肉小笼包", "大哥你好");

        //lambda中变量访问范围
        //如果变量被表达式使用，编译器则会认为变量为final 所以如果在表达式后在对变量进行赋值，表达式中的变量引用会报错
        //而且在表达式内部改变变量的值也是不允许的。即只能拿来用，用了之后别人也是只能拿来用
        //i++;
        Converter<String, Integer> converter2 = from -> Integer.parseInt(from) + i;
        Converter<String, Integer> converter3 = from -> Integer.parseInt(from) + a;

        //静态变量也可以访问，并且可以修改
        a++;
    }

    public void fieldLambda() {
        //实例变量也可以访问，并且可以修改
        Converter<String, Integer> converter = from -> Integer.parseInt(from) + c;
        c++;

    }

}
